﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Loja.Padrao;
using Loja.Controles.Aplicação;
using Loja.Banco;

namespace Loja.Telas
{
    public partial class FormCompra : PadraoCadastro
    {
        private Controle controle;

        private Int32 codigoCadastro;

        private Compra compra;

        private ItemCompra itemCompra;

        public FormCompra(Controle controle, Object compraParamentro)
        {
            this.controle = controle;
            this.compra = (Compra)compraParamentro;
            InitializeComponent();
            if (this.compra.Compra_ID != 0)
                PopulaTela(this.compra);
            else
                picStatus.Image = Loja.Properties.Resources.onlock;
        }

        private void btIncluir_Click(object sender, EventArgs e)
        {
            try
            {
                ConsultaProdutos frm = new ConsultaProdutos(controle, true);
                frm.ShowDialog(this);
                if (Convert.ToInt32(frm.produto) > 0)
                {
                    var item = controle.BuscaProdutoCompra(Convert.ToInt32(frm.produto), frm.qtdadeProduto, dgDados, compra);
                    BindingSource bs = new BindingSource();
                    bs.DataSource = item;
                    dgDados.DataSource = bs;

                    CalculaTotal();
                    this.dgDados.Columns["ItemCompra_ID"].Visible = false;
                    this.dgDados.Columns["Desativado"].Visible = false;
                    this.dgDados.Columns["Compra"].Visible = false;    
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao Incluir produto na compra" + ex.ToString());
            }
        }

        private void btLocalizar_Click(object sender, EventArgs e)
        {
            try
            {
                ConsultaCadastro frm = new ConsultaCadastro(controle, true);
                frm.ShowDialog(this);
                if (Convert.ToInt32(frm.cliente) > 0)
                {
                    var cliente = controle.BuscaCadastroCompra(Convert.ToInt32(frm.cliente));
                    txtNome.Text = cliente.Nome.ToString();
                    codigoCadastro = cliente.Cadastro_ID;
                }
            }
            catch
            {
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {

            if (compra.Compra_ID != 0)
            {
                //alterar
                if (ValidaCampos())
                {
                    CalculaTotal();
                    if (controle.AtualizaCompra(compra, txtDesconto.Text, txtValorCompra.Text, codigoCadastro, txtObs.Text, false))
                    {
                        MessageBox.Show("Compra Atualizada com sucesso!");
                        this.Close();
                    }
                    else
                        MessageBox.Show("Erro ao registrar compra!");
                }
            }
            else
            {
                //Incluir
                if (ValidaCampos())
                {
                    CalculaTotal();
                    if (controle.FinalizaCompra(dtInicio.Value, txtValorCompra.Text, txtDesconto.Text, txtObs.Text, codigoCadastro, compra, dgDados))
                    {
                        MessageBox.Show("Compra registrada com sucesso!");
                        this.Close();
                    }
                    else
                        MessageBox.Show("Erro ao registrar compra!");
                }
            }
        }

        public void CalculaTotal()
        {
            double valor = 0;
            foreach (DataGridViewRow linha in dgDados.Rows)
            {
                valor += Convert.ToDouble(linha.Cells[1].Value);
            }

            if (txtDesconto.Text == "0" || txtDesconto.Text == "")
                txtValorCompra.Text = valor.ToString();
            else
            {
                double desconto = Convert.ToDouble(txtDesconto.Text);
                txtValorCompra.Text = (valor - desconto).ToString();
            }
        }

        private void excluir_Click(object sender, EventArgs e)
        {
            try
            {                
                compra.ItemCompra.Remove((ItemCompra)dgDados.Rows[dgDados.CurrentRow.Index].DataBoundItem);                              
                CalculaTotal();
            }
            catch(Exception erro)
            {
                MessageBox.Show("Erro ao excluir item"+erro.ToString());
            }
        }

        public void ValidaQtdadeGrid(DataGridViewCellEventArgs e)
        {
            try
            {
                if (dgDados.Rows[e.RowIndex].Cells[1].Value == null)
                {
                    MessageBox.Show("Quantidade não pode ser nulo!");
                }

                else if ((Convert.ToInt32(dgDados.Rows[e.RowIndex].Cells[1].Value)) <= 0)
                {
                    MessageBox.Show("Quantidade informada não pode ser negativo!");
                    dgDados.Rows[e.RowIndex].Cells[1].Value = 1;
                }
            }
            catch
            {
                MessageBox.Show("Quantidade informada inválida!");
                dgDados.Rows[e.RowIndex].Cells[1].Value = 1;
            }
        }

        public Boolean ValidaCampos()
        {
            try
            {
                if (codigoCadastro == 0)
                {
                    MessageBox.Show("Fornecedor não localizado!");
                    return false;
                }
                else
                    if (txtValorCompra.Text == "" && dgDados.RowCount == 0)
                    {
                        MessageBox.Show("Não é possivel gravar a compra sem produto adicionado!");
                        return false;
                    }
                    else
                        if ((txtDesconto.Text != "" && Convert.ToDecimal(txtDesconto.Text) < 0) || Convert.ToDecimal(txtDesconto.Text) > Convert.ToDecimal(txtValorCompra.Text))
                        {

                            if (Convert.ToDecimal(txtDesconto.Text) < 0)
                            {
                                MessageBox.Show("Valor do Desconto não pode ser negativo!");
                                return false;
                            }
                            else
                                if (Convert.ToDecimal(txtDesconto.Text) > Convert.ToDecimal(txtValorCompra.Text))
                                {
                                    MessageBox.Show("Valor do Desconto não pode ser maior que o valor da Compras!");
                                    return false;
                                }

                        }
                return true;
            }
            catch
            {
                if (txtDesconto.Text == "")
                    return true;
                else
                    return false;
            }
        }

        private void txtDesconto_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }

        public void PopulaTela(Compra compra)
        {
            try
            {
                txtCodigo.Text = compra.Compra_ID.ToString();
                txtDesconto.Text = compra.ValorDesconto.ToString();
                txtNome.Text = compra.Cadastro.Nome;
                codigoCadastro = compra.Cadastro.Cadastro_ID;
                dtInicio.Value = compra.DataCompra;
                txtObs.Text = compra.Observacao.ToString();
                txtValorCompra.Text = compra.ValorCompra.ToString();

                if (compra.Status.Equals(true))
                {
                    picStatus.Image = Loja.Properties.Resources.unlock_32;
                    btnCancelar.Enabled = false;
                    btnSalvar.Enabled = false;
                    btIncluir.Enabled = false;
                }
                else
                    picStatus.Image = Loja.Properties.Resources.onlock;

                BindingSource bs = new BindingSource();
                bs.DataSource = compra.ItemCompra;
                dgDados.DataSource = bs.List;

                //desabilita colunas                  
                this.dgDados.Columns["ItemCompra_ID"].Visible = false;
                this.dgDados.Columns["Desativado"].Visible = false;
                this.dgDados.Columns["Compra"].Visible = false;                
                
                //desabilita edição
                this.dgDados.Columns[1].ReadOnly = true;
                this.dgDados.Columns[2].ReadOnly = true;
                this.dgDados.Columns[3].ReadOnly = true;
                this.dgDados.Columns["Produto"].ReadOnly = true;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            DialogResult dialogo = new DialogResult();
            dialogo = MessageBox.Show("Deseja FINALIZAR a compra?", "Finalizar Compra", MessageBoxButtons.YesNo);
            if (dialogo.ToString() == "Yes")
            {                
                if (controle.AtualizaCompra(compra, txtDesconto.Text, txtValorCompra.Text, codigoCadastro, txtObs.Text, true))
                {
                    MessageBox.Show("Compra Finalizada, não pode ser alterada");
                    Close();
                }
                else
                    MessageBox.Show("Erro ao finalizar compra!");
            }
        }

        private void btnSair_Click_1(object sender, EventArgs e)
        {
        }

        private void dgDados_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            ValidaQtdadeGrid(e);
        }
    }
}
